#include <iostream>
#include <vector>

using namespace std;
class Solution
{
public:
    bool validMountainArray_0(vector<int> &arr)
    {
        int n = arr.size();
        // 异常检查
        if (3 > n)
        {
            return false;
        }
        int i = 0;
        // 递增扫描- 前半段
        while (i + 1 < n && arr[i] < arr[i + 1])
        {
            i++;
        }

        // 最高点不能是数组的第一个位置或最后一个位置
        if (i == 0 || i == n - 1)
        {
            return false;
        }

        // 递减扫描-后半段
        while (i + 1 < n && arr[i] > arr[i + 1])
        {
            i++;
        }

        return i == n - 1;
    }

    bool validMountainArray(vector<int> &arr)
    {
        int n = arr.size();
        if (n <= 2)
        {
            return false;
        }
        int left = 0, right = n - 1;
        // 前半段递增扫描
        while (left + 1 < n && arr[left] < arr[left + 1])
        {
            left++;
        }
        // 后半段递减扫描
        while (right - 1 >= 0 && arr[right] < arr[right - 1])
        {
            right--;
        }
        return left == right && left != 0 && right != n - 1;
    }
};
int main()
{
    Solution s;
    // 0+5- 2
    vector<int> arr = {0, 1, 2, 4, 3, 1};
    cout << s.validMountainArray(arr) << endl;
    return 0;
}